home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Education
/
World of Education.iso
/
world_s
/
startrek.zip
/
CHAPTER.006
< prev
next >
Wrap
Text File
|
1989-05-15
|
50KB
|
991 lines
Chapter6 PAGE 1 STARTREK THE COMPUTER PROGRAM
CHAPTER 6
6.1 Short Range Sensors
The Short Range Sensors are the means by which a short range
radar scan is performed. They let the player examine everything
that is in the Quadrant as well providing game status
information.
There are 64 sectors in the quadrant which is also organized
as 8 rows of 8 sectors. In order for the computer to access each
sector some technique must be employed to store the quadrant and
the contents of the sectors into the computer.
We have already discussed that the contents of the quadrant
are stored in an array variable Q(I,J) as an array of rows and
columns where I represents the row and J the column. The
Quadrant array can thus be considered as having two dimensions
and the contents of any quadrant can be defined using Q(I,J)
where I and J define the row and column co-ordinates respectively
(ie. Q(2,6) refers to the contents of a quadrant that is two rows
down from the top corner and 6 columns along the row).
Each quadrant itself contains 64 sectors, also arranged as
an 8 by 8 array. The ground rules of the game only allow one
object to be in a sector at any one time. The contents of the
sectors are kept track of in an array similar to the quadrant
array Q, but this time called S(I,J). For example, S(2,6) refers
to the actual sector, the contents of the location in the array
define what is in the sector. The contents can be set by using
the LET statement such as
LET S(2,6) = 1.
The contents of any sector can be assigned a number
corresponding to the occupant as follows,
1 represents a blank or empty sector
2 represents a star
3 represents the Enterprise
4 represents a Klingon (an enemy vessel)
5 represents a starbase
An example of a Short Range Sensor scan is shown below.
SHORT RANGE SENSORS IN QUADRANT 4,6
1 2 3 4 5 6 7 8 SCORE 511.3
1 . . . . . . . . TIME LEFT 23.9
2 * . . . . . . . CONDITION RED
3 . . . K . . . K SHIELDS 255.6
4 . . . . . . . . ENERGY 3456.0
5 . . . . * . . . PHOTON TORPEDOES 3
6 . . . * * . * . STARBASES 2
7 . . . . . E . . KLINGONS LEFT 21
8 . . . . . * . . KLINGONS CAPTURED 0
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 2 STARTREK THE COMPUTER PROGRAM
The occupants of the sector in the basic game can be any one
of the following,
. represents a blank or empty sector
* represents a star
E represents the Enterprise
K represents a Klingon (an enemy vessel)
B represents a starbase
The game status information alongside the radar display is
as follows;
TIME LEFT The amount of play time left in the game.
CONDITION The state of the Enterprise. There are three
possible conditions,
RED Battle area, enemy in quadrant
YELLOW One of the sub-systems aboard the
Enterprise is damaged, or the Energy level has
fallen to below 400 units.
GREEN Everything is fine, no enemy detected, no
damage, and sufficient available energy aboard the
ship.
SHIELDS The amount of energy allocated to the ship's
shields. If this energy level is ever beaten down
to zero by the enemy, the Enterprise is destroyed
and you lose the game.
ENERGY The amount of energy on board the Enterprise. If
this ever falls to zero, the Enterprise becomes a
derelict in space, and you lose the game.
PHOTON TORPEDOES The number of photon torpedoes remaining on
board the Enterprise.
STARBASES The number of starbase in the galaxy, even if you
have not located them all.
KLINGONS LEFT The number of enemy ships in the galaxy.
Should you destroy them all, you will win the game.
KLINGONS CAPTURED The number of enemy vessels you have
captured. Each one captured is a bonus multiplier
on your score.
The flow chart for the Short Range Sensor routine is shown
in figure 6.1.
In order to perform a short range sensor scan, we first
have to test if the short range scanners are damaged. If they are
damaged, the contents of the quadrant cannot be scanned let alone
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 3 STARTREK THE COMPUTER PROGRAM
displayed. Thus a message that tells the player that the sensors
are broken is displayed.
Assuming workable sensors, a test is performed to determine
if the Enterprise is inside the galaxy. If it is inside the
galaxy, and if the computer is up, the quadrant data is loaded
into the Map. If the computer is down, the scan will take place,
the information will be displayed on the screen, but the data
will not be put into the map. The display heading is generated
and the column numbers and score displayed.
The display routine comprises a similar pair of loops to the
map routine. Here the contents of the sector are shown as a
letter, followed by a "space" character. At the end of each row,
one item of game status information is displayed. The cursor is
then moved to the start of the next line, and the loops continue.
The BASIC language implementation of the flowchart can take
the form shown in figure 6.2.
Line 400 contains the REMark or comment. Line 410 tests the
state of the sensors. If they are damaged, ie IF D(I) > 0 then a
message that the sensors are damaged is displayed and the
subroutine exits at this time, as since the sensors are damaged,
there is no point is continuing in the sequence.
Line 420 checks to see if the quadrant is outside the
galaxy. If it is, the program flow advances to line 440 skipping
the scanning of the quadrant. If this test was not present,
BASIC would output an error message when it tries to update the
Q(I,J) array for quadrants outside the galaxy. The reason for
the error messages is that when Q1 or Q2 have negative values,
the statement Q(Q1,Q2) is invalid. There is also no space
allocated in the array for when Q1 and Q2 have values greater
than 7. to store any data. The test used the OR statement to
determine if any one of four conditions is met. If anyone of
them is, the Enterprise is outside the Galaxy, because in order
to be in the galaxy, the Q1 and Q2 co-ordinates of the ship must
have values in the range of 0 to 7.
The state of the ship's computer (D(5)) is tested in line
430. If it is working, ie. IF D(5) = 0 then the Map can be
updated. The map is updated by the statement Q(Q1,Q2) =
ADS(Q(Q1,Q2)) which makes the contents of the quadrant a positive
number. This is the normal scanning technique as used
previously. If the computer was damaged, the contents of the
quadrant are not entered into the map, but the radar display is
still performed beginning at line 440.
Line 440 first uses the subroutine starting at line 70 to
display the heading. It then determines the current condition of
the Enterprise by calling the subroutine beginning at line 3400.
It next displays the column number using the statement
PRINT " 1 2 3 4 5 6 7 8";
which is a simple method of doing the job. The Long Range Sensor
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 4 STARTREK THE COMPUTER PROGRAM
display used a different technique which was more complex. Two
different techniques for doing almost the same job have thus been
presented for your review. Which one is correct? They are both
correct. In your future programs use the one you like best. The
line is then tabbed across to the 20th character position by the
TAB(20) ; and the subroutine starting at line 170 is invoked to
display the current score. The line then sets up the row loop.
Line 450 contains the column loop. It first displays the
contents of each sector along the row and then tabs the cursor to
the 20th character position along the display line. Before we
look at line 450, consider for a minute how the contents of the
sectors are distinguished. The contents of each sector S(I,J),
can be set up to be an integer between 1 and 5 where
1 represents a blank or empty sector
2 represents a star
3 represents the Enterprise
4 represents a Klingon (an enemy vessel)
5 represents a starbase.
So if for example, for any sector with co-ordinates (I,J),
if S(I,J) = 4, there is a Klingon in that sector. Each of the
objects that can be in a sector are represented by a letter as
follows
. for a blank or empty sector
* for a star
E for the Enterprise
K for a Klingon (an enemy vessel)
B for a starbase.
These letters are stored as a string S$ in the order
corresponding to the number associated with the object. This
means that S$ = ".*EKB" because the correspondence is as follows.
1 . for a blank or empty sector
2 * for a star
3 E for the Enterprise
4 K for a Klingon (an enemy vessel)
5 B for a starbase.
In order to display the letter for the object, we have to
pick the correct letter out of S$. For example, if S(I,J) = 4
the fourth letter in S$ which happens to be a "K" is to be
displayed, because the number 4 in S(I,J) corresponds to the
presence of a Klingon.
Line 450 displays the corresponding letters by using the
PRINT MID$(S$,N,L) function in the form PRINT MID$(S$,S(I,J),Z);
" "; which operates as follows. The Z at the end (the number 1
corresponding to the 'L') tells the computer that a one character
string long is to be displayed. S$ tells the computer which
string to search for the letter. The starting location of the
string to be displayed is set by the contents of S(I,J). Thus
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 5 STARTREK THE COMPUTER PROGRAM
for each sector in the quadrant, the value of S(I,J) is
determined. The letter corresponding to the number stored in the
S(I,J) array is then displayed followed by a "space" character.
The J loop repeats until the contents of all the sectors in a
particular row have been displayed. At the end of the row, the
cursor is moved to the position of the 20th character along the
line by the PRINT TAB(20) ; statement. Note the use of the semi
colon after both the MID$ and TAB print statements to stop the
cursor advancing to the next line.
If you look back to the example of the Short Range Sensor
display, you will see that a different item of status information
is displayed at the end of each line. Line 460 routes the
computer to the correct item to be displayed by the use of the
'ON' statement. Lines 500 to 570 inclusive display the data
elements. Since the value of the line counter (I), varies
between 0 and 7, while the 'ON' statement requires a number equal
to 1 or more, I+Z is used to convert the line count of 0-7 to the
range of 1-8 needed for the ON statement.
When the 'ON' statement is encountered the program flow
branches to the destination specified by the order of the line
numbers. In our case after the first row is displayed, when I+Z
= 1, the program will branch to line 470. After the second row,
to line 480, after the third row to line 490, and so on.
Each of these lines are similar. They first display the
name of the data element. The cursor position is then moved to
the 38th character position along the line by the 'TAB(38);'
statement and the contents of the actual element then displayed.
After each element has been displayed the program flow branches
forward to line 550 which increments the row loop counter, and
when it times out, terminates the command function (subroutine).
The variables used to store the game status items are as follows.
T = The DAYS LEFT in the game
C$ = The CONDITION of the Enterprise
E1 = Energy in the SHIELDS
E = The total ENERGY of the Enterprise
P = The number of PHOTON TORPEDOES left
B9 = The number of STARBASES remaining (multiplied by 10)
K9 = The number of KLINGONS LEFT in the galaxy (multiplied by 10)
K4 = The number of KLINGONS CAPTURED"
Since both B9 and K9 are stored multiplied by 100, they have
to be divided by 100 before being displayed, hence for example,
the K9/100 in the PRINT statement of line 530.
The subroutine to calculate and display the score begins at
line 170 with the usual REMark statement. The score changes as a
function of the time elapsed since the game started, the number
of Klingons destroyed and the number of Klingons captured or
suicided. Line 180 computes a value for the score and places it
in the temporary variable 'N' using the statement
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 6 STARTREK THE COMPUTER PROGRAM
180 N=INT(((K8-K9)/100)*(K5/2.5+K4+Z)^2*100/(T9-T)) : IF N<0 THEN N=0
Consider the statement in sections. The number of Klingons
destroyed is computed using the
INT((K8-K9)/100)
statement. The result is then divided by the elapsed time
calculated in the
(T9-T)
statement. If the score was just a function of the number of
enemy ships destroyed in the elapsed time so far, the value of N
would be
180 N=INT(((K8-K9)/100)/(T9-T)).
However a multiplier is put in
to make capturing Klingons worth while even though they tend to
damage the Enterprise during the capturing process. This
multiplication factor is given by the statement
(K5/2.5+K4+Z)^2*100
which represents one hundred time the square of the number of
Klingons captured (K4) added to the number of Klingons that have
suicided (K5) divided by two and a half. This complex multiplier
generously rewards the player for taking the time and effort to
capture Klingons and also gives a small amount of compensation
for those that were destroyed by their own captain rather than be
captured. If the value computed for N by the expression
N=INT(((K8-K9)/100)*(K5/2.5+K4+Z)^2*100/(T9-T))
is negative, the value of N is set to zero by the statement
IF N<0 THEN N=0
at the end of the line.
Line 190 displays the score in a formatted position in the
display using the 'PRINT "SCORE";TAB(38);N' statements and
terminates the subroutine with the 'RETURN' statement at the end
of the line.
At this carefully time copy lines 400 to 550 and line 170 to
190 from figure 6.2 into your program and save it. Do not try to
execute the Short Range Sensor command at this time. If you do,
you will get error messages, because certain prerequisites have
not been met.
6.2 The VISUAL Command
Now would be a good time to look at the VISual command,
since it essentially performs a subset of the Short Range Sensor
command. The Visual command displays the contents of the
sectors adjacent to the Enterprise. If the co-ordinates of the
Enterprise in the Quadrant are S1 and S2 (ie S(S1,S2) = 3), then
to display the contents of the adjacent sectors to the Enterprise
the row and column loop counters just have to work on S1 and S2
plus or minus 1.
The visual command is normally only used when the Short
Range Sensors are damaged.
Samples of the VISUAL command display are
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 7 STARTREK THE COMPUTER PROGRAM
(a) . . . . . (b) . . . . . (c) $ $ . . .
. . . . . . . . . . $ $ * * .
. . E K . . B E K . $ $ E . .
$ $ $ $ $ . . . . . $ $ . . .
$ $ $ $ $ . . . . . $ $ . . .
the first one (a) shows the Enterprise and a Klingon on the
bottom row of the quadrant. The second (b) shows the Enterprise,
a starbase and a Klingon somewhere in the middle sectors of the
quadrant, and the last one (c) places the Enterprise in the first
column of sectors. Two stars are also shown in the row above the
Enterprise.
The flow chart for the VISUAL command is shown in figure
6.3.
The Visual command always works because you can always see
out of the windows. The command is thus two loops for displaying
the contents of the sectors adjacent to the Enterprise. Care
must be taken so that sectors that are outside the quadrant are
treated differently to sectors inside the quadrant. This is
because the computer will output an error message if an attempt
to access an illegal value of S(I,J) is made. and of course I
and J will have illegal values for sectors outside the quadrant
(ie less than 0 or greater than 7). These sectors are displayed
as dollar signs to enable the player to locate the Enterprise
within a quadrant should the Short Range Sensors be damaged.
The Visual Command subroutine may be written in BASIC as
shown in figure 6.4.
It begins at line 2500 with the usual REMark statement. The
heading is displayed when line 2510 invokes the subroutine
starting at line 70. Two loops are invoked using a FOR/NEXT loop
format as
FOR I = S1-2 TO S1+2 : FOR J = S2-2 TO S2+2.
Line 2520 tests to see if the sector whose contents are
being displayed are inside the quadrant by using the logical 'OR'
statement. The statement
IF I<0 OR I>7 OR J<0 OR J>7 THEN
will only be true if any one of the four conditions being tested
are met. That is, if the value of I or J are less than 0 or
greater than 7. If they are the 'PRINT "$"; : GOTO 2540' part of
the line displays the dollar sign and advances the program past
line 2530 which does the displaying of the letter associated with
the contents of a sector as discussed above by means of the
'PRINT MID$(S$,S(I,J),Z);' statement. Line 2540 displays the
"space" character then advances the column counter. After a row
has been displayed, a 'PRINT' statement moves the cursor to the
next line and the row counter is incremented. When that loop is
terminated, the 'last command flag' (C9) is set to one to to
inhibit line 3090 (in the main command loop) from moving any
Klingons in the quadrant. The subroutine terminates at the
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 8 STARTREK THE COMPUTER PROGRAM
RETURN statement.
At this time carefully copy lines 2500 to 2540 from figure
6.4 into your computer program, don't forget to update the date
in line 10, and save them. Again do not try to execute the
command at this time or you will get error messages because
before the contents of a quadrant can be displayed visually or as
a short range radar display, they have to be set up first. The
contents of the Q(I,J) array corresponding to a particular
quadrant have to be transformed into values that can be used to
position the different objects into various sectors. Consider
the sample short range radar display shown above.
There are two Klingons, no starbases and six stars in the
Quadrant. The Quadrant co-ordinates are 4,6 so we know that
Q(4,6) = 206. Thus before a Short Range Sensor command can be
performed, that 206 has to be transformed so that the Klingons,
stars and the Enterprise can be positioned in the various sectors
within the quadrant.
The flow chart to set up a new quadrant and position the
objects within it is shown in figure 6.5. The first thing that
is done is to clean up the quadrant by making all the sectors
blank. This takes care of any previous contents of the array
associated with any previous quadrant. The number of
Klingons,starbases and stars in the quadrant are then computed.
The Enterprise is then positioned in the quadrant followed by the
Starbase if any, the stars and then the Klingons, again if any.
If there are enemy ships in the quadrant, a 'RED ALERT' message
is displayed. The program then checks to see if the player has
put the shield up. If they are down, a message is displayed to
that effect. The message is put out by the "Starfleet Command
Training Simulator" part of the program.
The BASIC language implementation of the flowchart could be
as shown in figure 6.6. It begins at line 3200 with the
customary REMark statement. Line 3210 then sets every sector in
the quadrant to blank (ie it sets S(I,J) = 1). The real thing
then begins at line 3220.
Line 3220 tests for,and sets up the contents of, a quadrant
that is outside the galaxy. By definition, there are no
starbases or klingons outside the galaxy. There is also a remote
possibility of the presence of a rogue star outside the galaxy.
The test to see if the quadrant is inside the galaxy begins with
the now familiar 'OR' test on the four requirements for being
within the galaxy
IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN
if the test is true the program continues along the line. If the
test is false, and the Enterprise is somewhere inside the galaxy,
the program continues with the next line (line 3230). If the
Enterprise is outside the galaxy, the Starbase and Klingon
variables are set to zero by the statements
K=0 : B=0 :.
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 9 STARTREK THE COMPUTER PROGRAM
A random number between 0 and 1.199 is then computed and
converted to an integer by the statement
S=INT(RND(Z)*1.2).
The probability of S being equal to one is thus quite low. The
line terminates with the 'GOTO 3250' statement which bypasses the
regular setting up code.
Line 3230 uses N as a temporary variable. N is given the
absolute value of the contents of the quadrant using the 'N =
ABS(Q(Q1,Q2))' statement. Since the number of Klingons is equal
to the hundreds digit, N can be divided by 100 to find out how
many Klingons are in the Quadrant. Suppose for example the
quadrant Q(Q1,Q2) = 306, there will be 3 Klingons, no starbases
and 6 stars in the quadrant. N is thus 306. If N is divided by
100 it will have a value of 3.06. It is then converted to an
integer (no decimal point) by using the INTeger function in
BASIC. The statement thus used to find the value of the number
of Klingons in the quadrant (represented by the variable K) is,
'K = INT(N/100)'.
N is again used as a temporary variable in the detection of
the presence of a starbase. The original value of N is the total
contents of the quadrant. K is the number of Klingons. If the
number of Klingons in the quadrant is multiplied by 100 and then
subtracted from the original number, all that will be left is the
number of stars and starbases. In our example we would see 306-
300 or 6. This function is performed in BASIC by the identity
'N = N - K*100'.
The presence of a starbase can be detected in a number of
ways. The technique used here is similar to that used to
determine the number of Klingons, namely 'B = INT(N/10)'. This
sets the value of 'B' to either '1' or '0' depending if a base is
there or is not. An alternative method could be to test to see
if N is greater than 10 and if so, set the value of B to 1, else
make it a 0. That could be written in BASIC as
IF N > 10 THEN B = Z ELSE B = 0.
an approach that would lock the game into only having one
starbase per quadrant. The technique used in line 3230 is more
general and does not care how many bases are in the quadrant.
Line 3240 computes the number of stars in the quadrant by
subtracting the number of Klingons (multiplied by 100) and the
number of starbases (multiplied by 10) from the original contents
of the quadrant using the statement
S = ABS(Q(Q1,Q2))-(K*100+B*10).
It has to use the 'ABS(Q(Q1,Q2))' value because the value of N
was changed by the operation that just preceded it and is no
longer equal to the contents of the quadrant.
Line 3250 invokes the subroutine beginning at line 50 to get
two random numbers. The co-ordinates of the Enterprise within
the quadrant (S1 and S2) are then set up. S1 is the row position
and S2 the column position. The subroutine used X and Y as dummy
variables for the purpose of communicating with the calling
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 10 STARTREK THE COMPUTER PROGRAM
routine (the two numbers have to be passed somehow). We could
have defined two special variable R1 and R2 for example, for this
purpose, but did not. X and Y can be reused elsewhere in the
program whenever a temporary variable is required. Reusing
variables is a good idea in that it saves memory (since each
variable occupies memory, and the more there are, the more memory
is used). It is not a good idea in the sense that if you are not
careful which and where variables are reused, strange things will
happen when you un-intentionally re-use a variable. The contents
of the quadrant occupied by the Enterprise are set to 3 by the
'S(X,Y) = 3' part of the line.
The last part of the line tests to see if a starbase is
present in the quadrant. if B = 0 then one is not and the
program flow skips to line 3270. If one is, line 3260 positions
it as follows. The random number generator subroutine that
starts at line 50 is called. It returns two numbers (X and Y)
which are now assumed to be the co-ordinates of the quadrant that
the base is to be located in. If the contents of the quadrant
are not equal to 1, ie the quadrant is not blank, a new random
quadrant is chosen. If the quadrant is blank, it is set to 5, to
signify the presence of the base. The BASIC language
implementation of the operation is
IF S(X,Y) <> Z THEN 32650 ELSE S(X,Y) = 5
where <> means "is not equal to". Literally is means, "is less
than, or, is greater than". If a number is less than or greater
than another number, they certainly cannot be equal.
For each star in the quadrant, the FOR/NEXT loop in lines
3270 and 3280 locate a blank sector and position a star in it in
a similar manner.
The last part of line 3290 tests for the absence of
Klingons. If the value of K = 0 then no Klingons are present in
the quadrant and the program flow branches forward to line 3340.
If there are Klingons in the quadrant, they are positioned in a
likewise manner by the FOR/NEXT loop in lines 3300 to 3320. Line
3300 sets up the individual Klingon data. The row (K1(I)) and
column (K2(I)) co-ordinates are first set up, and then the energy
available to the Klingon is then calculated. All Klingons are
given a random amount of energy between 0 and 999 units. The
amount of energy is stored in the K3(I) array. The last part of
the line displays a "RED ALERT" message using a FOR/NEXT loop to
display the words "RED ALERT" three times using the statements
'FOR I = 0 TO 3 : PRINT "RED ALERT " : NEXT'
The task could have been written using a different statement as
shown below
PRINT "RED ALERT RED ALERT RED ALERT".
You will find many places where a particular task can be
implemented in a number of ways, most of them equally correct.
Line 3330 outputs a "beep" or tome to the terminal. The
standard ASCII control character used to sound a bell tone at the
console terminal is 7. The character is a non printing one. The
'CHR$(7)' function tells BASIC to output the control character 7
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 11 STARTREK THE COMPUTER PROGRAM
to the terminal. If you remember, CHR$(26) was used earlier to
clear the screen. The last part of the line samples the amount
of energy in the Shields. if it is zero, the shields are down and
the player has moved the Enterprise into a quadrant containing
enemy vessels. That is a definite NO-NO! A message to that
effect is displayed. There is also a good probability as you
will find later, that the Enterprise will be destroyed by the
Klingons.
Copy lines 3200 to 3340 from figure 6.6 into your computer
program at this time and save it. Then try to RUN the program.
The Visual and Short Range Sensor displays should work and show
active displays. The CONDITION will be blank because C$ has not
yet been set up. If your program is not performing correctly and
you are getting error messages, debug it and eliminate them at
this time, then save the corrected or debugged version of the
program. Add a temporary line or statement to define C$ =
"DEBUG" in case the absence of a defined value for C$ is
bothering your computer.
A static display like this is dull so lets fudge a move
command to position the Enterprise in different quadrants. For
debugging, we can put in a temporary move command as shown below
which will allow different quadrants to be scanned.
1300 REM NAV WARP ENGINES/NAVIGATION
1310
1305 GOSUB 50 : Q1 = X : Q2 = Y : GOSUB 3200
1315 PRINT "MOVED TO QUADRANT ";Q1+Z;",";Q2+Z
1750 RETURN
These lines perform a "move" operation on the Enterprise by
relocating it at random throughout the galaxy each time the Move
command is invoked. Note the use of numbers ending in 5
signifying by our convention that they are temporary lines to be
deleted later. These lines are inserted following line 1300.
Line 1310 is left blank. Just enter the line number followed by
a carriage return. This procedure will delete the current line
1310 which contains a 'GOTO 1000' instruction.
Line 1605 uses the random number subroutine to set up the
Galactic Quadrant co-ordinates (Q1 and Q2) of the Enterprise. The
set up subroutine of line 3200 is then invoked to position the
contents of the quadrant in the relevant sectors. The variables
Q1 and Q2 are used to remember in which quadrant the Enterprise
is located at any stage of the game, in a similar manner to the
use of S1 and S2 to note which sector inside a quadrant the
Enterprise is occupying. Q1 and Q2 are important when moving the
Enterprise around the galaxy and S1 and S2 are important when
things will begin to happen inside the quadrant.
Line 1615 displays a message that the Enterprise has moved
and also displays the destination. The +Z in the PRINT statement
is used to convert the 0-7 co-ordinates that the computer uses
tot he 1-8 that the player uses. The point has been discussed
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 12 STARTREK THE COMPUTER PROGRAM
earlier. The subroutine terminates at line 1625.
Enter lines 1605 to 1625 and run the program. You should
now be able to move the Enterprise around the galaxy and get
different displays when executing the Short Range Sensor, Visual,
Map and Long Range Sensor commands while moving around the
different quadrants in the galaxy.
Stop the program execution (^C) and enter D(5) = 2. Then
let the program CONTinue. You will now find that the Map does not
work. The computer is down. Move to a new quadrant and to a
Long Range Sensor Scan. Then use the Damage Control to repair
the computer and try the Map display again. If all has gone
well, you will find that the information about the quadrant that
the Enterprise is currently located in has not been entered into
the Map. If it has, you either have a bug in your version of the
Program, or the data was entered by a previous Long Range Sensor
scan. Stop the program, enter D(5) = 2 and move again. Now
exercise the Map, repair the computer and try the map again. The
map should not show the contents of the Enterprise's quadrant.
Do a Long Range Sensor scan and then a Map command. The map
should now be updated.
At this time, a lot has been accomplished. All that is left
as far as the quadrant is concerned is to set up the Condition
(C$), ie determine the Condition of the starship. If you
remember the condition was defined as follows.
RED Battle area, enemy in quadrant
YELLOW One of the sub-systems aboard the Enterprise is
damaged, or the Energy level has fallen to below 400
units.
GREEN Everything is fine, no enemy detected, damage, and
sufficient energy aboard the ship.
The flow chart to determine the condition of the Enterprise
is shown in figure 6.7.
The first thing that happens is that the contents of the
sectors adjacent to the Enterprise are sampled to see if the
Enterprise is located next to a starbase. If the Enterprise is
located in a sector adjacent to a base, then a further test is
performed to see if the Enterprise is already docked. If the
Enterprise is already docked, the parameters (Energy and Photon
Torpedoes) are reset to their initial values. This allows the
player to blast away at any Klingons in the sector while the Base
continually resupplies the ship.
If the Enterprise is not yet docked, then a test is
performed to determine if any Klingons are in the quadrant. If
there are, there is a possibility that the starbase will not be
able to lower its shields (presumably it is also under attack by
the enemy) to allow the Enterprise to dock. This possibility is
set at 50%. Thus if there are Klingons in the quadrant, there is
a 50% probability that the Enterprise will not be able to dock.
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 13 STARTREK THE COMPUTER PROGRAM
Its too bad if you are badly hit and are limping home to base
with the Klingons firing at you. If you are really unlucky they
might even destroy the Enterprise while it is waiting to dock.
The docking procedure, displays a message that docking is taking
place, deducts half a stardate from the time left in the game and
updates the ship's Energy and weapon parameters. The condition
of the ship is also set to "DOCKED" at this time.
On the other hand, if the Enterprise is not located in a
quadrant that is adjacent to a base, the program first tests to
see if any Klingons are present in the quadrant. If they are,
the condition is set to "RED". If no Klingons are there, then
the condition can be either "YELLOW" or "GREEN".
The condition can be "YELLOW" if one of the subsystems is
damaged, or if the total remaining energy aboard the Enterprise
is less than 400 units (10% of the initial value). If either of
those conditions are met, the condition is set to YELLOW. If
none are met, all is assumed to be OK and the condition is set to
"GREEN".
The BASIC language implementation of the flowchart is as
shown in figure 6.8. The subroutine begins at line 3400 with the
usual REMark. Line 3410 commences two loops that perform the
sector scan. The technique used is almost the same as that used
in the Visual command. Here instead of accepting what ever is in
the sector, we just need to know if one contains a base. The row
and column loops scan one sector in each side of the Enterprise,
including the one occupied by the Enterprise itself. We know
that that test will fail, but so what? The search routine is
simplified if we can treat all sectors in the same way. We thus
just performs a continuous scan on nine sectors (three per row).
Line 3420 checks to see if a sector is outside the quadrant.
If it is the program skips forward to line 3440 bypassing line
3430 which does the actual test to see if the sector contains a
Starbase using the statement
IF S(I,J) = 5 THEN 3450.
If the sector does contain a base, the loop is terminated by the
branch to line 3450. The test is skipped for sectors outside the
galaxy because S(I,J) is invalid if I or J are less than 0 or
greater than 7. Line 3440 terminates the loops and then directs
the program to continue at line 3490 in the event that a Starbase
was not found.
If a base was located, the program picks up at line 3450
which tests to see if the Enterprise is already docked. The
value of C$ is used as the condition flag. If it is "DOCKED"
then the Enterprise is already docked and the parameters are
updated using the subroutine starting at line 90 and repairs all
the subsystems by calling the subroutine starting at line 3550
which sets all sub-systems to "working" (D(I)=0). The routine
then branches forward to line 3540.
It is simpler to just set all the sub-systems to zero rather
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 14 STARTREK THE COMPUTER PROGRAM
than test each one and set it to zero if it is non zero. The
computer is fast, the player will never notice the difference in
execution time between the two different methods. Setting them
all to zero irrespective of the way way they were results in them
all being zero, and that is what we want. Programs should use
the "KISS" principle as well as being structured. KISS by the
way is an acronym for
KEEP IT SIMPLE STUPID.
If the Enterprise is not docked, line 3460 tests to see if
there are any Klingons in the Quadrant. The test statement
includes the logical 'AND' statement. This means that both test
conditions have to true before the program will continue at the
line number specified by the 'THEN' part of the test.
The first part of the test (IF K>0 ) tests to see if the
number of Klingons in the sector is greater than zero. If it is,
then there are enemy vessels in the quadrant. At this time,
their numbers do not matter. The second part of the test (RND(Z)
< .5 ) uses the random number function built into BASIC to
generate a random number between 0 and 0.99999. The number is
then compared with a constant (0.5). If the random number is
less than 0.5 (a 50% probability), the test is true and the
program flow continues at line 3490. Note that if the first test
fails, Microsoft BASIC will ignore the second test and continue
program execution at the next line number.
The docking procedure begins at line 3470. The first thing
that happens, is that a message is displayed telling the player
that the Enterprise is docking. The display message is in two
parts. D$(6) is used to save space in the program source code.
We have previously defined D$(6) to contain the word "SHIELDS "
(see line 4580). Then the subroutine starting at line 3550 is
invoked to repair all of the on-board sub-systems. Once the
systems are repaired, a message to that effect is displayed at
the console by the last part of the line. Line 3480 invokes the
parameter updating subroutine starting at line 90, then subtracts
half a stardate from the game time remaining ( T = T - .5 ) and
sets the value of C$ to "DOCKED". The program flow then branches
forward to line 3540.
Line 3490 is where we pick up if the Enterprise is not
located adjacent to a starbase. It tests the value of K to
determine if any of the enemy are present in the quadrant. If
the value of K is greater than zero, namely there is at least one
Klingon in the quadrant, then C$ is set to "RED" and the program
skips to line 3540. If there aren't any Klingons in the
quadrant, then the program continues at line 3500.
Line 3500 examines the state of the sub-systems using a
FOR/NEXT loop. If any sub-system has a value of D(I) greater
than 0, it is damaged. The contents of C$ are set to "YELLOW"
and the program flow leaves the loop by GOing TO line 3540. We
don't care which one is damaged, we only care if any one of them
is. If the test fails, then all the subsystems are in working
Copyright (c) Joe Kasser 1989
Chapter6 PAGE 15 STARTREK THE COMPUTER PROGRAM
order, and the loop times out naturally. The program then tests
the amount of Energy remaining aboard the starship to see if it
is less than 10% of the initial value. If it is, the contents of
C$ are also set to "YELLOW" else the amount of energy is greater
than 10% of the initial value, (and nothing is damaged) and the
contents of C$ are set to "GREEN". The subroutine terminates at
line 3440.
This subroutine has itself called two subroutines, one at
line 90, the second at line 3550. When one subroutine calls an
other the second subroutine is called a "nested" subroutine. The
terminology is the same as that used to refer to loops.
Copy lines 3400 to 3540 from figure 6.8 into your program,
check your spelling, then SAVE it and RUN it. The game should
behave as before, but now, the condition should show up as "RED"
or "GREEN" depending on the presence or absence of Klingons in
the quadrant. Break the program and set the amount of energy to
less than 400 units (enter E = 200 for example). CONTinue the
program and see if the condition changes between YELLOW and RED.
Stop the program (^C again), re RUN it and this time break it and
damage a subsystem (enter D(I) = 3, where I is the number of your
choice). Now again test that the condition varies between YELLOW
and RED. Repair the damaged sub-system and verify that the
condition now changes between GREEN and RED. At this time save
the program because it should be working properly. Delete line
1305 and 1315 so as to avoid any trouble when the real "MOV"
command is implemented.
At this time the program should be as shown in figure 6.9.
Once the Short Range Sensors and the Visual commands have been
programmed, the next stage is to implement the real move command.
Copyright (c) Joe Kasser 1989